Joins এবং Relational Queries

Database Tutorials - আরাঙ্গো (ArangoDB)
259
259

ArangoDB-তে Joins এবং Relational Queries এমন ডেটা সংগ্রহ এবং বিশ্লেষণ করার কৌশল যা বিভিন্ন Collection বা Documents-এর মধ্যে সম্পর্ক খুঁজে বের করতে ব্যবহৃত হয়। যদিও ArangoDB একটি মাল্টি-মডেল ডাটাবেস, এটি গ্রাফ মডেল এবং AQL (ArangoDB Query Language) ব্যবহার করে সম্পর্কিত ডেটা পরিচালনার জন্য উন্নত সুবিধা প্রদান করে।


Joins কী?

Joins হলো বিভিন্ন Collection-এর ডেটাকে একত্রিত করার পদ্ধতি। ArangoDB-তে Joins SQL-এর মতো সরাসরি না হলেও AQL ব্যবহার করে Relational Queries পরিচালনা করা যায়।


Relational Queries এর প্রয়োজনীয়তা

  1. ডেটার মধ্যে সম্পর্ক নির্ধারণ।
  2. একাধিক Collection থেকে ডেটা সংগ্রহ।
  3. ডেটার কাঠামো বিশ্লেষণ।
  4. প্রাসঙ্গিক তথ্য সহজে বের করা।

AQL দিয়ে Joins করা

উদাহরণ: দুটি Collection এর মধ্যে Joins

students এবং courses নামে দুটি Collection রয়েছে। প্রতিটি ছাত্র course_id ব্যবহার করে একটি কোর্সের সাথে যুক্ত।

FOR student IN students
    FOR course IN courses
    FILTER student.course_id == course._key
    RETURN {
        student_name: student.name,
        course_name: course.name
    }

ব্যাখ্যা:

  • students এবং courses Collection থেকে ডেটা বের করা হয়েছে।
  • student.course_id এবং course._key এর মধ্যে সম্পর্ক স্থাপন করা হয়েছে।
  • ফলাফল: প্রতিটি ছাত্র এবং তাদের কোর্সের নাম।

Subqueries এবং Nested Joins

Subquery উদাহরণ

FOR student IN students
    LET enrolled_courses = (
        FOR course IN courses
            FILTER course._key == student.course_id
            RETURN course.name
    )
    RETURN {
        student_name: student.name,
        courses: enrolled_courses
    }

ব্যাখ্যা:

  • প্রতিটি ছাত্রের জন্য কোর্সের তালিকা খুঁজে বের করতে Subquery ব্যবহার করা হয়েছে।
  • LET এর মাধ্যমে ফলাফল একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছে।

Cross-collection Queries

যখন একাধিক Collection-এর ডেটা একত্রে প্রয়োজন হয়, তখন Cross-collection Queries ব্যবহার করা হয়।

উদাহরণ: Multiple Collections

FOR order IN orders
    FOR customer IN customers
    FILTER order.customer_id == customer._key
    RETURN {
        order_id: order._key,
        customer_name: customer.name
    }

Joins-এর সুবিধা

  1. ডেটার মধ্যে সম্পর্ক বের করা সহজ।
  2. AQL ব্যবহার করে Nested এবং Complex Queries চালানো।
  3. Relational Queries-এর মাধ্যমে ডেটা অ্যানালাইসিস।
  4. Performance Optimization: ইনডেক্স ব্যবহার করে দ্রুত Query Execution।

Relational Queries-এ Common Scenarios

  1. Parent-Child Relationship: একটি ডকুমেন্টের সাথে সম্পর্কিত ডেটা অন্য Collection থেকে সংগ্রহ করা।
  2. Many-to-Many Relationship: একটি Collection থেকে একাধিক ডকুমেন্টের সাথে সম্পর্ক স্থাপন।
  3. Filtered Data Retrieval: ফিল্টার ব্যবহার করে প্রাসঙ্গিক ডেটা বের করা।

Joins-এর জন্য Best Practices

  1. Index ব্যবহার করুন: Collection-এর Key Field-এ ইনডেক্স প্রয়োগ করলে Query দ্রুততর হয়।
  2. Projection ব্যবহার করুন: শুধুমাত্র প্রয়োজনীয় ফিল্ড রিটার্ন করুন, যাতে পারফরম্যান্স উন্নত হয়।
  3. Graph Model বিবেচনা করুন: জটিল Relational Data মডেলিংয়ের জন্য ArangoDB-এর গ্রাফ ডেটাবেস ব্যবহার করুন।

Graph Model দিয়ে Joins পরিচালনা

ArangoDB-তে গ্রাফ ডেটাবেস ব্যবহার করে আরও উন্নত Relational Queries করা যায়।

Graph Traversal Example

FOR v, e, p IN 1..2 OUTBOUND "students/123" GRAPH "education_graph"
    RETURN {
        student: p.vertices[0].name,
        related_data: v
    }

ব্যাখ্যা:

  • Graph Traversal: students নোড থেকে আউটবাউন্ড নোডগুলোর ডেটা বের করে।
  • এটি সম্পর্কিত ডেটার জন্য আরও সহজ এবং কার্যকর।

সারাংশ

ArangoDB-তে Joins এবং Relational Queries-এর জন্য AQL অত্যন্ত কার্যকর। এটি Subqueries, Cross-collection Queries এবং গ্রাফ মডেল ব্যবহার করে ডেটার সম্পর্ক বিশ্লেষণ এবং সংগ্রহ সহজ করে। ডেটা মডেলিং এবং পারফরম্যান্স অপ্টিমাইজেশনের জন্য সঠিক পদ্ধতি এবং ইনডেক্সিং ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ।

common.content_added_by

AQL এ Joins ব্যবহার করা

236
236

AQL (ArangoDB Query Language)-এ Joins ব্যবহার করা হয় ডকুমেন্ট বা কালেকশন থেকে সম্পর্কিত ডেটা একত্রে আনার জন্য। এটি ডাটাবেসের বিভিন্ন কালেকশনের মধ্যে সম্পর্ক তৈরি এবং ডেটা বিশ্লেষণ করার জন্য খুবই কার্যকর।

AQL-এ Joins অন্যান্য ডাটাবেসের মতো ফর্মাল সিস্টেমে কাজ না করলেও, কোয়েরি স্ট্রাকচারে FOR এবং FILTER এর মাধ্যমে কার্যকরভাবে Joins সম্পাদন করা যায়।


AQL-এ Joins এর প্রকারভেদ

  1. Inner Join: দুই কালেকশনের মধ্যে সম্পর্কিত ডেটা বের করে।
  2. Left Join (বা Outer Join): একটি কালেকশনের সব ডেটা এবং অপরটির মিলিত ডেটা বের করে।

উদাহরণ: AQL-এ Joins

১. দুটি কালেকশন তৈরি করা

  • Customers কালেকশন:
{ "_key": "cust1", "name": "Rahim" }
{ "_key": "cust2", "name": "Karim" }
  • Orders কালেকশন:
{ "_key": "order1", "customer_id": "cust1", "product": "Laptop" }
{ "_key": "order2", "customer_id": "cust2", "product": "Mobile" }
{ "_key": "order3", "customer_id": "cust1", "product": "Tablet" }

২. Inner Join উদাহরণ

FOR c IN Customers
    FOR o IN Orders
        FILTER c._key == o.customer_id
        RETURN {
            customer_name: c.name,
            product: o.product
        }
ফলাফল:
[
  { "customer_name": "Rahim", "product": "Laptop" },
  { "customer_name": "Rahim", "product": "Tablet" },
  { "customer_name": "Karim", "product": "Mobile" }
]

এই কোয়েরি Customers এবং Orders এর মধ্যে customer_id এর ভিত্তিতে সম্পর্ক তৈরি করে।


৩. Left Join উদাহরণ

যদি কোনো গ্রাহকের অর্ডার না থাকে, তাহলে তাকে এখনও ফলাফলে অন্তর্ভুক্ত করা হবে:

FOR c IN Customers
    LET orders = (
        FOR o IN Orders
            FILTER c._key == o.customer_id
            RETURN o.product
    )
    RETURN {
        customer_name: c.name,
        products: orders
    }
ফলাফল:
[
  { "customer_name": "Rahim", "products": ["Laptop", "Tablet"] },
  { "customer_name": "Karim", "products": ["Mobile"] }
]

৪. Multiple Joins উদাহরণ

যদি একাধিক কালেকশনের মধ্যে Joins করতে চান:

FOR c IN Customers
    FOR o IN Orders
        FOR p IN Products
            FILTER c._key == o.customer_id AND o.product == p.product_name
            RETURN {
                customer: c.name,
                product: p.product_name,
                price: p.price
            }

AQL Joins-এর সুবিধা

  1. সহজ এবং কার্যকর কোয়েরি স্ট্রাকচার।
  2. বিভিন্ন কালেকশনের ডেটা ম্যানিপুলেশন।
  3. Flexible Filtering: সম্পর্কিত ডেটার নির্দিষ্ট অংশ বের করার জন্য।

Joins-এর সীমাবদ্ধতা

  • AQL-এ Joins খুব বড় ডেটাসেটের ক্ষেত্রে কম কার্যকর হতে পারে।
  • বড় Join অপারেশন চালানোর সময় পারফরম্যান্স অপ্টিমাইজ করতে Indexing ব্যবহার করা উচিত।

সারাংশ

AQL-এ Joins ডাটাবেসের বিভিন্ন কালেকশনের সম্পর্কিত ডেটা একত্রে বিশ্লেষণ করার জন্য অত্যন্ত কার্যকর। ডেভেলপাররা সহজেই FOR এবং FILTER ব্যবহার করে Inner এবং Left Join সম্পাদন করতে পারেন। তবে বড় ডেটাসেটে পারফরম্যান্স নিশ্চিত করতে সঠিক Indexing অপরিহার্য।

common.content_added_by

Subqueries এবং Complex Queries

243
243

Subqueries এবং Complex Queries হলো ArangoDB-এর শক্তিশালী কোয়েরি ফিচার, যা জটিল ডেটা বিশ্লেষণ এবং প্রসেসিংকে সহজ করে। Subquery একটি কোয়েরির মধ্যে আরেকটি কোয়েরি হিসেবে কাজ করে এবং Complex Query বিভিন্ন ডেটাসেট এবং শর্তের ভিত্তিতে উন্নত বিশ্লেষণ করতে সাহায্য করে।


Subqueries

Subquery হল একটি কোয়েরি যা অন্য একটি কোয়েরির মধ্যে নেস্ট করা থাকে। এটি মূলত কোয়েরির একটি অংশ হিসেবে কাজ করে এবং একটি নির্দিষ্ট ফলাফল প্রদান করে, যা পরে প্রধান কোয়েরিতে ব্যবহার করা হয়।

উদাহরণ

১. Subquery দিয়ে Nested Data রিটার্ন করা:
FOR user IN Users
  LET posts = (
    FOR post IN Posts
      FILTER post.author == user._key
      RETURN post
  )
  RETURN { user: user, posts: posts }

এখানে:

  • প্রথম কোয়েরি Users থেকে ব্যবহারকারীদের তথ্য আনছে।
  • Subquery Posts থেকে প্রতিটি ব্যবহারকারীর পোস্ট সংগ্রহ করছে।
  • প্রধান কোয়েরি ব্যবহারকারী এবং তাদের পোস্টের একটি সমন্বিত ফলাফল রিটার্ন করছে।
২. Subquery ব্যবহার করে Grouped Data:
FOR category IN Categories
  LET products = (
    FOR product IN Products
      FILTER product.category == category._key
      RETURN product.name
  )
  RETURN { category: category.name, products: products }

এটি প্রতিটি ক্যাটাগরির সাথে সংশ্লিষ্ট পণ্যের নামগুলো রিটার্ন করে।


Complex Queries

Complex Query বিভিন্ন শর্ত, Subqueries, Joins এবং Aggregations ব্যবহার করে আরও জটিল ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়। এটি একাধিক ডেটাসেট এবং Nested Data নিয়ে কাজ করে।

উদাহরণ

১. Multiple Filters এবং Aggregations:
FOR order IN Orders
  FILTER order.status == "delivered" AND order.amount > 100
  COLLECT customer = order.customer INTO ordersGrouped
  RETURN { customer: customer, totalOrders: LENGTH(ordersGrouped) }

এখানে:

  • Filters: delivered স্ট্যাটাস এবং amount > 100 এর জন্য ফিল্টার।
  • Aggregation: প্রতি গ্রাহকের মোট অর্ডারের সংখ্যা গণনা।
২. Complex Query with Join এবং Subquery:
FOR user IN Users
  LET totalSpent = SUM(
    FOR order IN Orders
      FILTER order.customer == user._key
      RETURN order.amount
  )
  RETURN { user: user.name, totalSpent: totalSpent }

এখানে:

  • Subquery ব্যবহার করে প্রতিটি ব্যবহারকারীর মোট ক্রয়ের পরিমাণ গণনা।
  • প্রধান কোয়েরি এটি ব্যবহারকারীর নামসহ রিটার্ন করছে।
৩. Nested এবং Linked Data Process:
FOR user IN Users
  LET friends = (
    FOR friend IN Friends
      FILTER friend.user == user._key
      RETURN friend
  )
  LET posts = (
    FOR post IN Posts
      FILTER post.author == user._key
      RETURN post
  )
  RETURN { user: user.name, friends: friends, posts: posts }

এটি প্রতিটি ব্যবহারকারীর নাম, তার বন্ধুদের তালিকা এবং তার পোস্টগুলো রিটার্ন করে।


Subqueries এবং Complex Queries এর সুবিধা

ডেটা বিশ্লেষণের গভীরতা

  • Nested এবং সম্পর্কিত ডেটার উন্নত বিশ্লেষণ করা যায়।

অপ্টিমাইজড পারফরম্যান্স

  • Subqueries-এর সাহায্যে প্রয়োজনীয় ডেটা কমিয়ে কোয়েরি অপ্টিমাইজ করা যায়।

গ্রাফ ডেটার সমর্থন

  • Complex Queries গ্রাফ ডেটার জন্য বিশেষভাবে কার্যকর।

পুনঃব্যবহারযোগ্য কোড

  • Subqueries কোয়েরি কাঠামোকে Modular এবং পুনঃব্যবহারযোগ্য করে তোলে।

সারাংশ

Subqueries এবং Complex Queries ArangoDB-এর একটি অত্যন্ত শক্তিশালী ফিচার, যা জটিল এবং সম্পর্কিত ডেটা বিশ্লেষণ সহজ করে। Nested কোয়েরি, Aggregations, এবং Joins ব্যবহার করে বড় এবং জটিল ডেটাবেস থেকে কার্যকর ফলাফল পাওয়া যায়। এটি ডেটা মডেলিং এবং ডেটা ট্রান্সফর্মেশনের জন্য একটি অপরিহার্য হাতিয়ার।

common.content_added_by

Nested Queries পরিচালনা

261
261

Nested Queries ArangoDB তে এমন কোয়েরি যেখানে একটি কোয়েরির ভেতরে আরেকটি কোয়েরি ব্যবহার করা হয়। এটি জটিল ডেটা বিশ্লেষণ এবং সম্পর্কিত ডেটার কার্যকর অনুসন্ধানের জন্য ব্যবহৃত হয়। AQL এ Nested Queries ব্যবহার করে সহজে সাব-কোয়েরি তৈরি করা সম্ভব।


Nested Query এর মূল ধারণা

  • একটি কোয়েরির ভেতরে অন্য একটি কোয়েরি ব্যবহার করে ডেটা সংগ্রহ করা।
  • সাব-কোয়েরির ফলাফলকে মেইন কোয়েরিতে ডেটা হিসেবে ব্যবহার করা হয়।
  • এটি JOIN, ফিল্টারিং, এবং সাব-গ্রুপিং অপারেশন পরিচালনার জন্য কার্যকর।

Nested Query উদাহরণ

১. সাব-কোয়েরি ব্যবহার করে ফিল্টারিং

FOR doc IN employees
  FILTER doc.salary > (
    FOR avgSalary IN employees
      COLLECT AGGREGATE avgSalary = AVG(avgSalary.salary)
      RETURN avgSalary
  )[0]
  RETURN doc

বর্ণনা:

  • সাব-কোয়েরি employees টেবিলের গড় বেতন (AVG) বের করে।
  • মেইন কোয়েরি সেই সকল এমপ্লয়িদের ডেটা ফেরত দেয়, যাদের বেতন গড় বেতনের বেশি।

২. সাব-কোয়েরি দিয়ে গ্রুপিং এবং গণনা

FOR department IN departments
  LET employeeCount = (
    FOR emp IN employees
      FILTER emp.departmentId == department._key
      COLLECT WITH COUNT INTO count
      RETURN count
  )[0]
  RETURN { department: department.name, totalEmployees: employeeCount }

বর্ণনা:

  • সাব-কোয়েরি প্রতিটি ডিপার্টমেন্টের জন্য কর্মচারীদের সংখ্যা গণনা করে।
  • মেইন কোয়েরি ডিপার্টমেন্টের নাম এবং কর্মচারীর সংখ্যা রিটার্ন করে।

৩. Edge এবং Vertex এর Nested Query

FOR v IN vertices
  LET relatedEdges = (
    FOR e IN edges
      FILTER e._from == v._id
      RETURN e
  )
  RETURN { vertex: v, edges: relatedEdges }

বর্ণনা:

  • সাব-কোয়েরি একটি Vertex এর সাথে সম্পর্কিত সকল Edge সংগ্রহ করে।
  • মেইন কোয়েরি Vertex এবং তার সম্পর্কিত Edge রিটার্ন করে।

৪. সাব-কোয়েরি থেকে একাধিক মান সংগ্রহ

FOR product IN products
  LET totalSales = (
    FOR order IN orders
      FILTER order.productId == product._key
      COLLECT AGGREGATE total = SUM(order.quantity)
      RETURN total
  )[0]
  RETURN { productName: product.name, totalSales: totalSales }

বর্ণনা:

  • সাব-কোয়েরি একটি প্রোডাক্টের জন্য সব অর্ডারের পরিমাণ যোগ করে।
  • মেইন কোয়েরি প্রোডাক্টের নাম এবং মোট বিক্রয় রিটার্ন করে।

Nested Query ব্যবহারের ক্ষেত্রে বিশেষ নির্দেশনা

  • পারফরম্যান্স: Nested Queries জটিল হলে কোয়েরি সময় বেশি লাগতে পারে।
  • ইনডেক্সিং: Nested Query অপ্টিমাইজ করতে রিলেভেন্ট ফিল্ডে ইনডেক্স ব্যবহার করুন।
  • সাব-কোয়েরি সীমাবদ্ধতা: সাব-কোয়েরি সরাসরি পুরো টেবিলে কাজ করে, তাই সাব-কোয়েরির ফলাফল ছোট রাখতে ফিল্টার ব্যবহার করুন।

Nested Query এর ব্যবহার ক্ষেত্র

  • জটিল সম্পর্ক বিশ্লেষণ।
  • গ্রুপিং এবং সাব-গ্রুপিং।
  • একাধিক স্তরের ডেটা ফিল্টারিং।
  • Edge এবং Vertex সম্পর্ক পরিচালনা।

সারাংশ

ArangoDB তে Nested Query ব্যবহার করে জটিল ডেটা বিশ্লেষণ এবং সম্পর্কযুক্ত ডেটা মডেল পরিচালনা সহজ হয়। সাব-কোয়েরি ডেটা ফিল্টারিং, গ্রুপিং, এবং গণনার জন্য কার্যকর হাতিয়ার। ডেটার গভীর বিশ্লেষণ প্রয়োজন হলে Nested Queries একটি অপরিহার্য টুল।

common.content_added_by

Cross-collection Queries

262
262

Cross-collection Queries ArangoDB-তে একাধিক Collection থেকে ডেটা একত্রে অনুসন্ধান, বিশ্লেষণ, এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। এটি ডকুমেন্ট বা গ্রাফ ডেটার মধ্যকার সম্পর্ক বিশ্লেষণ করার জন্য একটি শক্তিশালী পদ্ধতি।


Cross-collection Queries এর মূল ধারণা

ArangoDB-তে একাধিক Collection এর ডেটা যুক্ত করার জন্য AQL (ArangoDB Query Language) ব্যবহার করা হয়। এটি JOIN, FILTER, এবং অন্যান্য শর্তাবলী প্রয়োগের মাধ্যমে ডেটা পরিচালনা করে।

মূল উপাদান:

  • FOR: একাধিক Collection এর উপর লুপ চালাতে ব্যবহৃত হয়।
  • FILTER: Collection এর মধ্যে সম্পর্ক নির্ধারণ করতে ব্যবহৃত হয়।
  • RETURN: চূড়ান্ত রেজাল্ট প্রদান করে।

Cross-collection Query এর উদাহরণ

1. দুটি Collection এর ডেটা যুক্ত করা

FOR user IN users
    FOR order IN orders
        FILTER user._key == order.user_id
        RETURN { user: user.name, order: order.product }

উপরের কোয়েরি users এবং orders Collection এর ডেটা একত্রিত করে।


2. Nested Queries ব্যবহার

FOR user IN users
    LET orders = (
        FOR order IN orders
            FILTER order.user_id == user._key
            RETURN order
    )
    RETURN { user: user.name, orders: orders }

এখানে LET ব্যবহার করে Nested Query করা হয়েছে, যেখানে প্রতিটি ব্যবহারকারীর জন্য তাদের অর্ডার লিস্ট যুক্ত করা হয়েছে।


3. Filter সহ Cross-collection Query

FOR user IN users
    FOR order IN orders
        FILTER user._key == order.user_id AND order.status == "completed"
        RETURN { user: user.name, order: order.product }

এটি users এবং orders Collection এর মধ্যে ডেটা যুক্ত করে যেখানে order এর স্ট্যাটাস completed


4. Aggregation সহ Cross-collection Query

FOR user IN users
    FOR order IN orders
        FILTER user._key == order.user_id
        COLLECT username = user.name WITH COUNT INTO total_orders
        RETURN { username, total_orders }

এটি প্রতিটি ব্যবহারকারীর জন্য মোট অর্ডারের সংখ্যা রিটার্ন করে।


Graph Context এ Cross-collection Queries

গ্রাফ ডেটার ক্ষেত্রে Cross-collection Queries Vertex এবং Edge Collection এর মধ্যে সম্পর্ক বিশ্লেষণ করতে ব্যবহৃত হয়।

1. Vertex এবং Edge থেকে ডেটা রিট্রিভ করা

FOR vertex, edge IN 1..1
    OUTBOUND "users/user1" friendships
    RETURN { friend: vertex.name, relation: edge.type }

এটি friendships Edge Collection এবং users Vertex Collection থেকে ডেটা রিটার্ন করবে।

2. গ্রাফ Traversal এর সাথে Cross-collection Query

FOR vertex IN 1..2
    OUTBOUND "users/user1" friendships
    FOR post IN posts
        FILTER post.user_id == vertex._key
        RETURN { friend: vertex.name, post: post.title }

এটি user1 এর বন্ধু এবং তাদের তৈরি করা পোস্ট রিটার্ন করবে।


Performance Optimization

Cross-collection Queries পরিচালনার সময় Index ব্যবহার করা গুরুত্বপূর্ণ। এটি পারফরম্যান্স বৃদ্ধি করে।

Index ব্যবহার নিশ্চিত করুন:

  • Primary Index: প্রতিটি ডকুমেন্ট _key দ্বারা দ্রুত অ্যাক্সেসের জন্য।
  • Secondary Index: যেসব ক্ষেত্রে ফিল্টার ব্যবহার করা হয়।
  • Edge Index: গ্রাফ ডেটার মধ্যে সম্পর্ক দ্রুত অনুসন্ধানের জন্য।

Limit এবং Pagination প্রয়োগ

Pagination এর মাধ্যমে Cross-collection Queries এর ফলাফল সীমিত করা যায়।

FOR user IN users
    FOR order IN orders
        FILTER user._key == order.user_id
        LIMIT 0, 10
        RETURN { user: user.name, order: order.product }

এটি প্রথম ১০টি ফলাফল রিটার্ন করবে।


সারাংশ

Cross-collection Queries ArangoDB তে বিভিন্ন Collection এর ডেটা সংযুক্ত এবং বিশ্লেষণ করার একটি কার্যকর পদ্ধতি। এটি Nested Queries, Aggregation, এবং Graph Context এর মতো জটিল অপারেশন সহজ করে। ডেটা সম্পর্ক বিশ্লেষণ এবং পারফরম্যান্স অপ্টিমাইজেশনের জন্য Index ব্যবহারের উপর গুরুত্ব দিতে হবে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion